package psd.scala.rules
import scala.collection.JavaConversions._
import psd.scala.rules._

import psd.scala.FactDb

class ScalaRules {
	
	val ruleList = List[AbstractRule](new LowCohesion("La clase contiene muchos metodos. Baja Cohesion"), 
									new BrokenEncapsulation("Declaraste variable de clase publica"), 
									new AvoidConstantInterface("Una interfaz solo debe usarse para modelar un comportamiento de una clase: el uso de una interfaz como un contenedor de las constantes es un problema grave."),
									new AbstractClassWithoutMethods("Clase abstracta sin metodos."),
									new NoAbstractMethodInterface("La interfaz contiene metodos no abstractos."),
									new AbstractClassWithoutAbstractMethod("La clase abstracta no contiene metodos abstractos"),
									new PublicStaticNoFinalVariables("Declaraste una variable publica estatica no final."),
									new MethodsWithoutArgs("No tiene clases comunes"),
									new ImplementationOfManyInterfaces("La clase tiene implementadas demasiadas interfaces."),
									new AvoidConstantsInInterface("La interface contiene constantes")
									)
	
	def executeRules(db: FactDb) = {
	  
	ruleList.foreach(rule => rule.execute(db).foreach(bug => bug.Print()))
	
	}
}